package code.D1220;

/**
 * author： yeswater
 * create： 2023/12/22
 *
 * 比特位计数
 */
public class T338 {
    /**
     * 奇数：二进制表示中，奇数一定比前面那个偶数多一个 1，因为多的就是最低位的 1。
     *
     * 偶数：二进制表示中，偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0，除以 2 就是右移一位，也就是把那个 0 抹掉而已，所以 1 的个数是不变的。
     *
     */
    public int[] countBits(int n) {
        int[] res = new int[n+1];
        res[0] = 0;
        for(int i=1; i<=n; i++){
            if(i%2 == 1){
                res[i] = res[i-1]+1;
            }else{
                res[i] = res[i/2];
            }
        }
        return res;
    }
}
